Consumer Choice: A Pirate’s Guide to Utility Theory

ECON 2120G — Principles of Microeconomics | The Pirate Goats 🏴‍☠️🐐

Author

Dr. Meghan Downes

Published

January 1, 2026

1 Part 1: Why Is the Rum Gone?

1.1 🏴‍☠️ The Most Important Question in Economics

“Why is the rum gone?!” — Captain Jack Sparrow

Because Elizabeth burned it to signal the Navy.

She made a choice:

  • ✅ Rescue (high value to her)
  • ❌ Rum (high value to Jack)

Same stuff. Different utilities. Different choices.

This is the entire chapter in one scene.

1.2 🏴‍☠️ Jack’s Problem is YOUR Problem

Every day you face the same dilemma as Captain Jack:

You have limited treasure 💰 and unlimited wants.

  • Jack wants rum AND weapons AND a ship AND freedom
  • You want coffee AND Netflix AND gas AND textbooks
  • You can’t have it all → you must CHOOSE

Today’s mission: Learn how economists think about these choices — using rum 🥃 and weapons ⚔️

The Pirate Goat Guarantee 🐐

No calculus required. If you can add, subtract, multiply, and divide, you can do this. We’ll take it one step at a time.

1.3 What Even IS Utility?

Utility = a made-up number that represents how much satisfaction you get from consuming something

You consume… You feel… Economists say…
First bottle of rum 🥃 AMAZING High utility
Second bottle Pretty good Less utility
Fifth bottle Meh Even less utility
Tenth bottle 🤢 Almost zero utility

Key idea: We don’t measure utility in real units (there’s no “satisfaction-ometer”). We just need to rank things and compare them.

Note

Economists measure utility in fictional units called “utils.” Think of them like points in a video game — they don’t exist physically, but they help us keep score.

1.4 The Law of Diminishing Marginal Utility

Marginal utility = the extra satisfaction from consuming one more unit

Show R Code
rum_data <- data.frame(
  bottles = 1:8,
  mu = c(50, 35, 25, 18, 12, 8, 5, 2)
)

ggplot(rum_data, aes(x = bottles, y = mu)) +
  geom_col(fill = "#8B4513", alpha = 0.85, width = 0.7) +
  geom_line(color = "#c0392b", linewidth = 1.2) +
  geom_point(color = "#c0392b", size = 3) +
  labs(
    title = "Marginal Utility of Rum",
    subtitle = "Each bottle makes Jack less happy than the last",
    x = "Bottles of Rum 🥃",
    y = "Marginal Utility (utils)"
  ) +
  scale_x_continuous(breaks = 1:8) +
  theme_pirate

Bottle # MU (utils) Why?
1st 50 First rum in weeks!
2nd 35 Still great
3rd 25 Good but slowing down
4th 18 Starting to blur
5th 12 Jack’s swaying more
6th 8 Diminishing fast
7th 5 Why bother
8th 2 Almost zero

“The first bite of pizza is heaven. The eighth slice is regret.” — Universal truth

This is the Law of Diminishing Marginal Utility: each additional unit gives you LESS additional satisfaction. (Cowen & Tabarrok, Fig. 25.1–25.2, pp. 494–495)

1.5 Total Utility vs. Marginal Utility

Total utility = the running total. Marginal utility = the change from each new unit.

Show R Code
rum_full <- data.frame(
  bottles = 0:8,
  tu = c(0, 50, 85, 110, 128, 140, 148, 153, 155),
  mu = c(NA, 50, 35, 25, 18, 12, 8, 5, 2)
)

library(patchwork)

p1 <- ggplot(rum_full, aes(x = bottles, y = tu)) +
  geom_line(color = "#2980b9", linewidth = 1.5) +
  geom_point(color = "#2980b9", size = 3) +
  labs(title = "Total Utility", subtitle = "Keeps going up... but slower",
       x = "Bottles of Rum", y = "Total Utility (utils)") +
  scale_x_continuous(breaks = 0:8) +
  theme_pirate

p2 <- ggplot(filter(rum_full, !is.na(mu)), aes(x = bottles, y = mu)) +
  geom_col(fill = "#e74c3c", alpha = 0.8, width = 0.7) +
  labs(title = "Marginal Utility", subtitle = "The EXTRA satisfaction per bottle",
       x = "Bottles of Rum", y = "Marginal Utility (utils)") +
  scale_x_continuous(breaks = 1:8) +
  theme_pirate

p1 + p2

Read This Carefully

Total utility goes UP as long as marginal utility is POSITIVE. But it goes up by less and less each time. It’s like filling a bucket with a smaller cup each round — the bucket still fills, just slower.

1.6 🐐 Check Yourself: Rum Table Practice

Let’s fill in this table together. No tricks. Just adding.

Bottle Marginal Utility Total Utility
0 0
1 50 0 + 50 = ?
2 35 50 + 35 = ?
3 25 85 + 25 = ?
4 18 110 + 18 = ?
Bottle Marginal Utility Total Utility
0 0
1 50 50
2 35 85
3 25 110
4 18 128

Total utility at bottle N = Total utility at bottle (N-1) + Marginal utility of bottle N

That’s it. You’re just adding one number to the running total each time. 🎉

1.7 Now Let’s Add Weapons ⚔️

Jack doesn’t just want rum. He also needs weapons to defend the Black Pearl.

Show R Code
weapons_data <- data.frame(
  weapons = 1:8,
  mu_w = c(60, 45, 32, 22, 15, 10, 6, 3)
)

rum_plot <- ggplot(rum_data, aes(x = bottles, y = mu)) +
  geom_col(fill = "#8B4513", alpha = 0.85, width = 0.7) +
  labs(title = "MU of Rum 🥃", x = "Bottles", y = "Marginal Utility") +
  scale_x_continuous(breaks = 1:8) +
  coord_cartesian(ylim = c(0, 65)) +
  theme_pirate

weapon_plot <- ggplot(weapons_data, aes(x = weapons, y = mu_w)) +
  geom_col(fill = "#2c3e50", alpha = 0.85, width = 0.7) +
  labs(title = "MU of Weapons ⚔️", x = "Weapons", y = "Marginal Utility") +
  scale_x_continuous(breaks = 1:8) +
  coord_cartesian(ylim = c(0, 65)) +
  theme_pirate

rum_plot + weapon_plot

Both goods have diminishing marginal utility. But now Jack has a real problem:

If he spends his gold on rum, he can’t spend it on weapons. That’s the trade-off.

1.8 The Trade-Off Is NOT About Dollars

🚨 THE MOST COMMON MISTAKE 🚨

Students see a graph with “Rum” on one axis and “Weapons” on the other and think: “Where are the dollars?”

The dollars are GONE. You already spent them. The axes show you what you GOT for your money — physical goods, not cash.

Think of it this way:

  • Jack raids a treasure chest and finds 100 gold coins 💰
  • Rum costs 10 gold per bottle
  • Weapons cost 20 gold per weapon
  • He must spend it all (pirates don’t save — that’s macro 😉)

The question is: How many bottles of rum and how many weapons should he buy?

Every bottle of rum Jack buys means he gave up some weapons. Every weapon means he gave up some rum. That’s opportunity cost — and it’s what the graph shows!

2 Part 2: The Budget Constraint

2.1 🏴‍☠️ Jack’s Budget: Setting Up the Equation

Let’s get really specific. Here’s what Jack is working with:

What Jack has Value
💰 Income (treasure) 100 gold coins
🥃 Price of rum 10 gold per bottle
⚔️ Price of weapons 20 gold per weapon

The budget constraint says: everything you spend must add up to your income.

\[ \underbrace{P_{\text{Rum}}}_{\text{price of rum}} \times \underbrace{Q_{\text{Rum}}}_{\text{bottles you buy}} + \underbrace{P_{\text{Weapons}}}_{\text{price of weapons}} \times \underbrace{Q_{\text{Weapons}}}_{\text{weapons you buy}} = \underbrace{I}_{\text{income}} \]

Plugging in Jack’s numbers:

\[ 10 \times Q_{\text{Rum}} + 20 \times Q_{\text{Weapons}} = 100 \]

English Translation

“The gold I spend on rum PLUS the gold I spend on weapons EQUALS all my gold.”

2.2 Finding the Intercepts (The Easy Points)

To draw the budget line, we need two points. The easiest two points are the intercepts — where Jack spends ALL his gold on just one good.

2.2.1 🥃 All Rum, No Weapons

Set \(Q_{\text{Weapons}} = 0\):

\[ 10 \times Q_{\text{Rum}} + 20 \times (0) = 100 \] \[ 10 \times Q_{\text{Rum}} = 100 \] \[ Q_{\text{Rum}} = \frac{100}{10} = \mathbf{10} \]

Point: (10 bottles, 0 weapons)

2.2.2 ⚔️ All Weapons, No Rum

Set \(Q_{\text{Rum}} = 0\):

\[ 10 \times (0) + 20 \times Q_{\text{Weapons}} = 100 \] \[ 20 \times Q_{\text{Weapons}} = 100 \] \[ Q_{\text{Weapons}} = \frac{100}{20} = \mathbf{5} \]

Point: (0 bottles, 5 weapons)

The Intercept Shortcut 🏴‍☠️

Intercept = Income ÷ Price of that good.

  • Rum intercept: 100 ÷ 10 = 10
  • Weapons intercept: 100 ÷ 20 = 5

That’s it. Division. You’ve got this.

2.3 Drawing the Budget Line

Show R Code
budget_df <- data.frame(
  rum = c(0, 2, 4, 6, 8, 10),
  weapons = c(5, 4, 3, 2, 1, 0)
)

ggplot(budget_df, aes(x = rum, y = weapons)) +
  geom_line(color = "#2c3e50", linewidth = 2) +
  geom_point(color = "#c0392b", size = 4) +
  # Label intercepts
  annotate("text", x = 10.3, y = 0.3, label = "All Rum\n(10, 0)",
           fontface = "bold", size = 4, color = "#8B4513") +
  annotate("text", x = 0.8, y = 5.2, label = "All Weapons\n(0, 5)",
           fontface = "bold", size = 4, color = "#2c3e50") +
  # Shade the affordable region
  geom_ribbon(aes(ymin = 0, ymax = weapons), fill = "#3498db", alpha = 0.15) +
  annotate("text", x = 3, y = 1.5, label = "Affordable\nBundles",
           size = 5, color = "#2980b9", fontface = "italic") +
  labs(
    title = "Jack's Budget Constraint",
    subtitle = "Income = 100g | Rum = 10g/bottle | Weapons = 20g each",
    x = "Bottles of Rum 🥃",
    y = "Weapons ⚔️"
  ) +
  scale_x_continuous(breaks = 0:10) +
  scale_y_continuous(breaks = 0:5) +
  coord_cartesian(xlim = c(0, 11), ylim = c(0, 6)) +
  theme_pirate

  • On the line = spending ALL your income (efficient pirate ✅)
  • Inside the shaded area = affordable but not spending everything (wasteful pirate 😒)
  • Outside the line = can’t afford it (sad pirate 😢)

2.4 The Slope = The Price Ratio

The slope of the budget line tells you the real trade-off between goods.

\[ \text{Slope} = -\frac{P_{\text{Rum}}}{P_{\text{Weapons}}} = -\frac{10}{20} = -\frac{1}{2} \]

What Does -1/2 Mean?

For every 1 extra bottle of rum Jack buys, he gives up 1/2 a weapon.

Or: For every 1 extra weapon, he gives up 2 bottles of rum.

The slope IS the opportunity cost. (Cowen & Tabarrok, Fig. 25.4, p. 497)

Let’s verify with the table:

Rum 🥃 Weapons ⚔️ Check: 10×R + 20×W = ?
0 5 0 + 100 = ✅ 100
2 4 20 + 80 = ✅ 100
4 3 40 + 60 = ✅ 100
6 2 60 + 40 = ✅ 100
8 1 80 + 20 = ✅ 100
10 0 100 + 0 = ✅ 100

Every point adds up to 100. That’s the whole point of the budget line. ✅

2.5 What Moves the Budget Line?

Show R Code
library(patchwork)

# Income change
inc_df <- bind_rows(
  data.frame(rum = c(0, 10), weapons = c(5, 0), label = "I = 100g"),
  data.frame(rum = c(0, 15), weapons = c(7.5, 0), label = "I = 150g (raise!)"),
  data.frame(rum = c(0, 5), weapons = c(2.5, 0), label = "I = 50g (taxed!)")
)

p_inc <- ggplot(inc_df, aes(x = rum, y = weapons, color = label)) +
  geom_line(linewidth = 1.5) +
  scale_color_manual(values = c("#2ecc71", "#2c3e50", "#e74c3c")) +
  labs(title = "Income Changes", subtitle = "Line shifts parallel",
       x = "Rum 🥃", y = "Weapons ⚔️", color = NULL) +
  theme_pirate + theme(legend.position = "bottom", legend.text = element_text(size = 10))

# Price change (rum gets cheaper)
price_df <- bind_rows(
  data.frame(rum = c(0, 10), weapons = c(5, 0), label = "P_rum = 10g"),
  data.frame(rum = c(0, 20), weapons = c(5, 0), label = "P_rum = 5g (sale!)")
)

p_price <- ggplot(price_df, aes(x = rum, y = weapons, color = label)) +
  geom_line(linewidth = 1.5) +
  scale_color_manual(values = c("#2c3e50", "#e67e22")) +
  labs(title = "Rum Price Falls", subtitle = "Line pivots outward from weapons intercept",
       x = "Rum 🥃", y = "Weapons ⚔️", color = NULL) +
  theme_pirate + theme(legend.position = "bottom", legend.text = element_text(size = 10))

p_inc + p_price

What changes? What happens to the line? Why?
Income goes UP Shifts outward (parallel) More gold = more of everything
Income goes DOWN Shifts inward (parallel) Less gold = less of everything
Price of rum FALLS Pivots outward at weapons intercept Same weapons, but MORE rum affordable
Price of rum RISES Pivots inward at weapons intercept Same weapons, but LESS rum affordable

(Cowen & Tabarrok, Figs. 25.5–25.6, pp. 498–499)

2.6 🐐 Practice: Jack Gets a Raise

Jack’s income increases from 100 gold to 200 gold. Prices stay the same.

Step 1: New rum intercept = ?

\[Q_{\text{Rum}} = \frac{200}{10} = \mathbf{20 \text{ bottles}}\]

Step 2: New weapons intercept = ?

\[Q_{\text{Weapons}} = \frac{200}{20} = \mathbf{10 \text{ weapons}}\]

Step 3: New slope = ?

\[\text{Slope} = -\frac{P_R}{P_W} = -\frac{10}{20} = -\frac{1}{2} \quad \text{(unchanged!)}\]

🏴‍☠️ The line shifts out, but the slope stays the same. More gold doesn’t change the relative cost of rum vs. weapons — it just lets you buy more of both.

2.7 GOOD NEWS EVERYONE! 🏴‍☠️

“Why is the rum ALWAYS gone?”

Because, Jack, you keep maximizing utility at a corner solution.

Now that we understand the budget constraint — let’s figure out which bundle on that line makes Jack the happiest.

3 Part 3: Maximizing Utility

3.1 The Big Question

Jack’s budget constraint shows all the bundles he can afford.

But which one should he actually choose?

The one that gives him the MOST total utility.

But how do we find it? Two methods:

  1. 🧮 The MU/$ method (the workhorse — we’ll master this)
  2. 📐 The graphical method (indifference curves — we’ll see the intuition)

3.2 The “Bang for Your Buck” Method

Here’s the secret to smart shopping — whether you’re a pirate or an Aggie:

The Utility Maximization Rule

Spend your next gold coin on whichever good gives you the most extra utility per gold coin spent.

\[ \frac{MU_{\text{Rum}}}{P_{\text{Rum}}} = \frac{MU_{\text{Weapons}}}{P_{\text{Weapons}}} \]

When this condition holds, you cannot rearrange your spending to get more utility.

In English: If your last gold coin spent on rum gave you 3 utils per coin, and your last gold coin on weapons gave you 5 utils per coin… you should have bought more weapons!

You keep adjusting until both ratios are equal. (Cowen & Tabarrok, Fig. 25.3, p. 496)

3.3 Let’s Walk Through It — Slowly

Jack’s prices: Rum = 10g, Weapons = 20g. Income = 100g.

Qty MU of Rum MU/$ Rum MU of Weapons MU/$ Weapons
1 50 50/10 = 5.0 60 60/20 = 3.0
2 35 35/10 = 3.5 45 45/20 = 2.25
3 25 25/10 = 2.5 32 32/20 = 1.6
4 18 18/10 = 1.8 22 22/20 = 1.1
5 12 12/10 = 1.2 15 15/20 = 0.75
6 8 8/10 = 0.8 10 10/20 = 0.5
How to Calculate MU/$

It’s just division: Marginal Utility ÷ Price.

  • MU of 1st rum bottle = 50. Price = 10. So 50 ÷ 10 = 5.0 utils per gold coin.
  • MU of 1st weapon = 60. Price = 20. So 60 ÷ 20 = 3.0 utils per gold coin.

That’s it! No fancy math. Just “how many utils do I get for each gold coin?”

3.4 Step-by-Step: Jack Goes Shopping

Jack has 100 gold coins. Let’s spend them one purchase at a time.

Step Best MU/$ Available Jack Buys Gold Spent Gold Left
1 Rum MU/\(=5.0 > Weapons MU/\)=3.0 1st Rum 🥃 10 90
2 Rum MU/\(=3.5 > Weapons MU/\)=3.0 2nd Rum 🥃 10 80
3 Weapons MU/\(=3.0 > Rum MU/\)=2.5 1st Weapon ⚔️ 20 60
4 Rum MU/\(=2.5 > Weapons MU/\)=2.25 3rd Rum 🥃 10 50
5 Weapons MU/\(=2.25 > Rum MU/\)=1.8 2nd Weapon ⚔️ 20 30
6 Rum MU/\(=1.8 > Weapons MU/\)=1.6 4th Rum 🥃 10 20
7 Rum MU/\(=1.2 vs Weapons MU/\)=1.6 3rd Weapon ⚔️ 20 0

Jack’s optimal bundle: 4 Rum + 3 Weapons

Check: (4 × 10) + (3 × 20) = 40 + 60 = 100 gold ✅ Budget spent!

Note

At the optimum: MU/$ for rum (1.8) ≈ MU/$ for weapons (1.6). They’re close! In the real world with whole units, they won’t be exactly equal — just as close as possible. The textbook’s streaming movies/Thai takeout example (p. 494) works exactly the same way.

3.5 ☠️ What Happens If Jack is NOT Optimal?

Suppose Jack is being stubborn and spends all 100g on weapons:

  • He gets 5 weapons. MU of 5th weapon = 15. MU/$= 15/20 = 0.75
  • If he gave up the 5th weapon (saves 20g), he could buy 2 bottles of rum
  • Those 2 bottles give him: 50 + 35 = 85 utils
  • He only lost: 15 utils from the weapon

Net gain: 85 - 15 = 70 extra utils! 🎉

This is exactly the logic from the textbook’s Thai takeout example (Cowen & Tabarrok, Ch. 25, Problem 1, p. 494): giving up the 10th Thai meal (MU/$ = 0.5) to buy two movies (MU/$ = 10) is a massive improvement.

3.6 🐐 You Try: Is This Bundle Optimal?

Jack has 100g. Rum = 10g. Weapons = 20g. He’s currently holding 6 Rum and 2 Weapons.

Step 1: Does the budget work?

(6 × 10) + (2 × 20) = 60 + 40 = 100 ✅

Step 2: Check MU/$ at these quantities:

  • MU of 6th Rum = 8 → MU/$ = 8/10 = 0.8
  • MU of 2nd Weapon = 45 → MU/$ = 45/20 = 2.25

Weapons MU/$ (2.25) >> Rum MU/$ (0.8) ❌ NOT optimal!

Jack should buy fewer rum, more weapons until the ratios equalize.

The Golden Rule

If MU/$ is higher for one good, buy MORE of it (and less of the other). Keep adjusting until MU/$ is equal across goods.

4 Part 4: The Graphical Approach — Indifference Curves

4.1 What’s an Indifference Curve?

An indifference curve connects all bundles that give Jack the same level of utility.

Show R Code
# Indifference curves as hyperbolas
ic_df <- data.frame(rum = seq(0.5, 10, 0.1)) |>
  mutate(
    IC1 = 4 / rum,
    IC2 = 8 / rum,
    IC3 = 14 / rum
  )

ggplot(ic_df, aes(x = rum)) +
  geom_line(aes(y = IC1), color = "#3498db", linewidth = 1.2) +
  geom_line(aes(y = IC2), color = "#2ecc71", linewidth = 1.2) +
  geom_line(aes(y = IC3), color = "#e74c3c", linewidth = 1.2) +
  annotate("text", x = 8, y = 0.7, label = "U1 (low)", color = "#3498db",
           fontface = "bold", size = 4.5) +
  annotate("text", x = 8, y = 1.3, label = "U2 (medium)", color = "#2ecc71",
           fontface = "bold", size = 4.5) +
  annotate("text", x = 8, y = 2.2, label = "U3 (high!)", color = "#e74c3c",
           fontface = "bold", size = 4.5) +
  annotate("segment", x = 5, y = 2, xend = 7, yend = 3,
           arrow = arrow(length = unit(0.3, "cm")),
           color = "#555", linewidth = 1) +
  annotate("text", x = 6.5, y = 3.3, label = "Happier →",
           fontface = "bold", size = 5, color = "#555") +
  labs(
    title = "Jack's Indifference Curves",
    subtitle = "Higher curves = more utility = happier pirate",
    x = "Bottles of Rum 🥃",
    y = "Weapons ⚔️"
  ) +
  coord_cartesian(xlim = c(0, 10), ylim = c(0, 6)) +
  theme_pirate

Key rules: Higher = better. They never cross. They’re bowed inward (convex). (Cowen & Tabarrok, Figs. 25.7–25.8, pp. 500–501)

4.2 Why Are They Curved? The MRS

The curve shape reflects the Marginal Rate of Substitution (MRS):

How many weapons would Jack willingly give up for 1 more bottle of rum?

Show R Code
mrs_df <- data.frame(rum = seq(0.5, 9, 0.1)) |>
  mutate(weapons = 10 / rum)

ggplot(mrs_df, aes(x = rum, y = weapons)) +
  geom_line(color = "#2ecc71", linewidth = 1.5) +
  # Point A: few rum, lots of weapons
  annotate("point", x = 1, y = 10, size = 4, color = "#c0392b") +
  annotate("text", x = 1.8, y = 10.3, label = "A: Lots of weapons,\nlittle rum",
           size = 3.5, color = "#c0392b") +
  annotate("segment", x = 1, y = 10, xend = 2, yend = 10, color = "#c0392b",
           linewidth = 1, linetype = "dashed") +
  annotate("segment", x = 2, y = 10, xend = 2, yend = 5, color = "#c0392b",
           linewidth = 1, linetype = "dashed") +
  annotate("text", x = 2.5, y = 7.5, label = "Give up 5 weapons\nfor 1 rum",
           size = 3, color = "#c0392b") +
  # Point B: more balanced
  annotate("point", x = 5, y = 2, size = 4, color = "#2980b9") +
  annotate("text", x = 6.2, y = 2.3, label = "B: More balanced",
           size = 3.5, color = "#2980b9") +
  annotate("segment", x = 5, y = 2, xend = 6, yend = 2, color = "#2980b9",
           linewidth = 1, linetype = "dashed") +
  annotate("segment", x = 6, y = 2, xend = 6, yend = 10/6, color = "#2980b9",
           linewidth = 1, linetype = "dashed") +
  annotate("text", x = 6.7, y = 1.5, label = "Give up 0.3 weapons\nfor 1 rum",
           size = 3, color = "#2980b9") +
  labs(title = "The MRS Changes Along the Curve",
       subtitle = "You'll give up less of what you already have little of",
       x = "Bottles of Rum 🥃", y = "Weapons ⚔️") +
  coord_cartesian(xlim = c(0, 10), ylim = c(0, 12)) +
  theme_pirate

At point A: Jack has tons of weapons, almost no rum. He’d trade away 5 weapons for 1 rum. At point B: More balanced. He’d only trade 0.3 weapons for 1 rum.

The less you have of something, the more valuable the next unit is. (Cowen & Tabarrok, Ch. 25 solution to Q4, pp. 500–501)

4.3 The Consumer’s Optimum 🎯

The best bundle is where the budget constraint just barely touches the highest possible indifference curve.

Show R Code
opt_df <- data.frame(rum = seq(0.3, 10, 0.05)) |>
  mutate(
    budget = 5 - 0.5 * rum,
    IC_low = 3.5 / rum,
    IC_opt = 6.25 / rum,
    IC_high = 10 / rum
  )

ggplot(opt_df, aes(x = rum)) +
  geom_line(aes(y = budget), color = "#2c3e50", linewidth = 2) +
  geom_line(aes(y = IC_low), color = "#bdc3c7", linewidth = 1, linetype = "dashed") +
  geom_line(aes(y = IC_opt), color = "#2ecc71", linewidth = 1.5) +
  geom_line(aes(y = IC_high), color = "#e74c3c", linewidth = 1, linetype = "dashed") +
  annotate("point", x = 5, y = 2.5, size = 5, color = "#e67e22") +
  annotate("text", x = 6.2, y = 3, label = "OPTIMAL\nBUNDLE ★",
           fontface = "bold", size = 5, color = "#e67e22") +
  annotate("text", x = 8.5, y = 0.6, label = "Too low\n(affordable but sad)",
           size = 3.5, color = "#bdc3c7") +
  annotate("text", x = 8.5, y = 1.5, label = "Just right!",
           size = 3.5, color = "#2ecc71", fontface = "bold") +
  annotate("text", x = 8.5, y = 3.5, label = "Too expensive\n(can't afford)",
           size = 3.5, color = "#e74c3c") +
  labs(
    title = "The Consumer's Optimum",
    subtitle = "Highest indifference curve that just touches the budget line",
    x = "Bottles of Rum 🥃", y = "Weapons ⚔️"
  ) +
  coord_cartesian(xlim = c(0, 10), ylim = c(0, 6)) +
  theme_pirate

At the tangency point (★): slope of IC = slope of budget line, which means MRS = Price ratio (Cowen & Tabarrok, Fig. 25.9, p. 502)

4.4 What the Optimum Means in English

At the optimal bundle, two things are true simultaneously:

1. You’re ON the budget line → spending all your income

2. MRS = Price Ratio → your personal trade-off matches the market trade-off

\[ \underbrace{\frac{MU_{\text{Rum}}}{MU_{\text{Weapons}}}}_{\text{how YOU value rum vs. weapons}} = \underbrace{\frac{P_{\text{Rum}}}{P_{\text{Weapons}}}}_{\text{how the MARKET values rum vs. weapons}} \]

If these don’t match, you can make yourself happier by trading.

Note

This is the graphical version of the MU/$ rule. Same answer, prettier picture. The MU/$ approach says: equalize the bang-per-buck. The tangency approach says: equalize personal valuation with market valuation. Same thing. Two languages.

5 Part 5: When Things Change

5.1 🏴‍☠️ Price of Rum Falls! (Raid successful 🎉)

Suppose rum drops from 10g to 5g per bottle. Weapons still 20g. Income still 100g.

Show R Code
change_df <- data.frame(rum = c(0, 10, NA, 0, 20)) |>
  mutate(
    weapons_old = c(5, 0, NA, NA, NA),
    weapons_new = c(NA, NA, NA, 5, 0)
  )

ggplot() +
  geom_segment(aes(x = 0, y = 5, xend = 10, yend = 0),
               color = "#2c3e50", linewidth = 1.5, linetype = "dashed") +
  geom_segment(aes(x = 0, y = 5, xend = 20, yend = 0),
               color = "#e67e22", linewidth = 2) +
  annotate("text", x = 5, y = 3.5, label = "OLD: Rum = 10g",
           color = "#2c3e50", fontface = "bold", size = 4) +
  annotate("text", x = 13, y = 2, label = "NEW: Rum = 5g",
           color = "#e67e22", fontface = "bold", size = 4) +
  annotate("text", x = 0.8, y = 5.3, label = "Same intercept\n(weapons unchanged)",
           size = 3.5, color = "#555") +
  annotate("segment", x = 10, y = -0.1, xend = 20, yend = -0.1,
           arrow = arrow(length = unit(0.3, "cm")),
           color = "#e67e22", linewidth = 1) +
  annotate("text", x = 15, y = -0.4, label = "Can buy more rum!",
           color = "#e67e22", fontface = "bold", size = 4) +
  labs(
    title = "Budget Constraint Pivots When Rum Price Falls",
    subtitle = "Weapons intercept unchanged, rum intercept doubles",
    x = "Bottles of Rum 🥃", y = "Weapons ⚔️"
  ) +
  scale_x_continuous(breaks = seq(0, 20, 2)) +
  scale_y_continuous(breaks = 0:5) +
  coord_cartesian(xlim = c(0, 21), ylim = c(-0.5, 6)) +
  theme_pirate

Old New
Rum intercept 100/10 = 10 100/5 = 20
Weapons intercept 100/20 = 5 100/20 = 5
Slope -10/20 = -1/2 -5/20 = -1/4

Jack can now reach a higher indifference curve → more utility! 🎉 (Cowen & Tabarrok, Fig. 25.10, p. 503)

5.2 Income vs. Substitution Effects

When the price of rum falls, TWO things happen simultaneously:

5.2.1 🔄 Substitution Effect

Rum is relatively cheaper now → Jack substitutes toward rum and away from weapons.

“Rum’s on sale! Buy more rum!”

5.2.2 💰 Income Effect

Jack’s real purchasing power increased (same gold buys more) → he can buy more of BOTH goods.

“I feel richer! More of everything!”

For rum (the good whose price fell):

  • Substitution effect → more rum ✅
  • Income effect → more rum ✅ (assuming rum is a normal good)
  • Total: definitely more rum

For weapons (the other good):

  • Substitution effect → fewer weapons ❌
  • Income effect → more weapons ✅
  • Total: ambiguous — depends which effect is stronger

(Cowen & Tabarrok, Fig. 25.11, p. 504)

5.3 🐐 Practice: Income Drops

A royal tax reduces Jack’s treasure from 100g to 60g. Prices unchanged (Rum=10g, Weapons=20g).

Find the new intercepts:

  • Rum intercept: 60 ÷ 10 = 6 bottles
  • Weapons intercept: 60 ÷ 20 = 3 weapons
  • Slope: -10/20 = -1/2 (unchanged — only income changed!)

What happened to the budget line?

It shifted inward, parallel to the original. Same slope, lower intercepts. Jack can afford less of everything. 😢 (Cowen & Tabarrok, Fig. 25.5, p. 498)

5.4 Deriving Demand from Utility

Here’s the payoff: Utility theory IS demand theory.

When the price of rum falls (10g → 5g), Jack buys more rum. That’s one point on his demand curve.

Show R Code
p_budget <- ggplot() +
  geom_segment(aes(x = 0, y = 5, xend = 10, yend = 0),
               color = "#2c3e50", linewidth = 1.5, linetype = "dashed") +
  geom_segment(aes(x = 0, y = 5, xend = 20, yend = 0),
               color = "#e67e22", linewidth = 1.5) +
  annotate("point", x = 4, y = 3, size = 4, color = "#2c3e50") +
  annotate("point", x = 10, y = 2.5, size = 4, color = "#e67e22") +
  annotate("text", x = 4.5, y = 3.4, label = "A", fontface = "bold", size = 5) +
  annotate("text", x = 10.5, y = 2.9, label = "B", fontface = "bold", size = 5) +
  labs(title = "Budget + Indifference Curves",
       x = "Rum 🥃", y = "Weapons ⚔️") +
  coord_cartesian(xlim = c(0, 21), ylim = c(0, 6)) +
  theme_pirate

p_demand <- ggplot() +
  annotate("point", x = 4, y = 10, size = 4, color = "#2c3e50") +
  annotate("point", x = 10, y = 5, size = 4, color = "#e67e22") +
  annotate("text", x = 4.5, y = 10.5, label = "A", fontface = "bold", size = 5) +
  annotate("text", x = 10.5, y = 5.5, label = "B", fontface = "bold", size = 5) +
  geom_segment(aes(x = 4, y = 10, xend = 10, yend = 5),
               color = "#c0392b", linewidth = 1.5) +
  labs(title = "Jack's Demand for Rum",
       x = "Quantity of Rum 🥃", y = "Price of Rum (gold)") +
  coord_cartesian(xlim = c(0, 15), ylim = c(0, 15)) +
  theme_pirate

p_budget + p_demand

  • Point A: Price = 10g → Jack buys 4 rum (optimal bundle)
  • Point B: Price = 5g → Jack buys 10 rum (new optimal bundle)
  • Connect the dots → DEMAND CURVE! 📉

Demand slopes downward because of diminishing marginal utility and the substitution/income effects. Utility theory explains why demand curves look the way they do.

6 Part 6: Putting It All Together

6.1 The Pirate Goat Summary 🏴‍☠️🐐

Concept What It Means Jack’s Version
Utility Satisfaction from consuming How happy rum makes him
Marginal Utility Extra satisfaction per unit The 1st rum is amazing, the 8th is meh
Diminishing MU Each unit adds less Law of “too much of a good thing”
Budget Constraint All affordable combos What 100g of treasure can buy
Slope = -Px/Py The market trade-off 1 rum costs 1/2 weapon
MU/$ equalization How to maximize utility Spend where bang-for-buck is highest
Indifference Curve Same-utility bundles Doesn’t care between 4R+3W or 6R+2W
Tangency = Optimum MRS = Price Ratio Personal value = market value
Price change → Demand Optimal bundles at different prices The demand curve!

6.2 The Real-World Connection

This isn’t just about pirates. Every choice you make is this model:

  • 🍕 Pizza vs. 🌮 Tacos with your meal plan
  • 📱 Phone upgrade vs. 👟 New shoes with your paycheck
  • 📚 Study time vs. 🎮 Gaming time (time is a budget too!)
  • ☕ Daily Starbucks vs. 🎬 Weekend movies with your fun money

Every time you ask “Is this worth it?” you’re comparing MU/$. You already do utility maximization — now you just know the formal framework.

Note

Remember Marcus from the textbook (Ch. 25, Q12): he has a money constraint AND a time constraint. Real life has multiple budget constraints — time, money, energy — and you optimize across all of them.

7 Appendix: For the Calculus-Curious 🧮

7.1 Setting It Up with Calculus

📝 This section is OPTIONAL

Nothing in this appendix will be on your exams. This is for students who want to see what’s happening “under the hood.” If calculus gives you hives, skip it with zero guilt.

Suppose Jack’s utility function is:

\[U(R, W) = R^{0.6} \cdot W^{0.4}\]

where \(R\) = rum and \(W\) = weapons. His constraint:

\[10R + 20W = 100\]

7.2 The Lagrangian Method

We want to maximize \(U(R,W)\) subject to the budget constraint.

Set up the Lagrangian:

\[\mathcal{L} = R^{0.6} W^{0.4} - \lambda(10R + 20W - 100)\]

Take partial derivatives and set them to zero:

\[\frac{\partial \mathcal{L}}{\partial R} = 0.6 R^{-0.4} W^{0.4} - 10\lambda = 0\]

\[\frac{\partial \mathcal{L}}{\partial W} = 0.4 R^{0.6} W^{-0.6} - 20\lambda = 0\]

\[\frac{\partial \mathcal{L}}{\partial \lambda} = 100 - 10R - 20W = 0\]

7.3 Solving for the Optimum

Divide the first equation by the second:

\[\frac{0.6 R^{-0.4} W^{0.4}}{0.4 R^{0.6} W^{-0.6}} = \frac{10\lambda}{20\lambda}\]

\[\frac{0.6}{0.4} \cdot \frac{W}{R} = \frac{1}{2}\]

\[\frac{3}{2} \cdot \frac{W}{R} = \frac{1}{2} \quad \Rightarrow \quad W = \frac{R}{3}\]

Plug back into the budget constraint:

\[10R + 20\left(\frac{R}{3}\right) = 100\] \[10R + \frac{20R}{3} = 100\] \[\frac{50R}{3} = 100 \quad \Rightarrow \quad R = 6, \quad W = 2\]

Optimal bundle: 6 Rum, 2 Weapons\(U = 6^{0.6} \cdot 2^{0.4} \approx 4.13\) utils

The calculus confirms what the MU/$ method finds — just with more precision and fewer tables. Same economics, different toolkit. 🔧

7.4 🏴‍☠️ Final Words from the Captain

What Jack Sparrow taught us today:

  1. You can’t have all the rum AND all the weapons
  2. The budget constraint shows your real trade-offs
  3. Smart pirates equalize “bang for your buck”
  4. Price changes create new opportunities
  5. The demand curve comes FROM utility maximization

Next class: We’ll build worksheets with these concepts and practice until the MU/$ of studying econ equals the MU/$ of everything else you could be doing.

“But why is the rum gone?!”

Because you spent your budget optimally, Captain. 🏴‍☠️🐐


7.4.1 References

  • Cowen, T., & Tabarrok, A. (2024). Modern Principles: Microeconomics (6th ed.). Worth Publishers. Chapter 25: Consumer Choice.
  • Figures referenced: 25.1–25.12, pp. 494–506.
  • All memes and clips used under fair use for educational purposes.
Back to top